<?php


class PartidoTable extends Doctrine_Table
{

	public static function getInstance()
	{
		return Doctrine_Core::getTable('Partido');
	}

	public function getPartidosByUser(Usuario $user, $sector = null)
	{
		 
		$q = $this->createQuery('a')
		->leftJoin('a.Visitante eV')
		->leftJoin('a.Local eL')
		->leftJoin('eV.Club cV')
		->leftJoin('eL.Club cL')
		->where('(cV.id = ? OR cL.id = ?)', array($user->getClubId(), $user->getClubId()));

		if ($sector!=null) {
			// Tanto el local como el visitante tienen el mismo sector....
			$q = $q->andWhere('eL.sector = ?', $sector);
		}

		$q->orderBy('a.fecha');
		
		return $q->execute();
	}

	public function procesarPartidos()
	{
		$partidos = $this->getPartidosAProcesar();
		foreach($partidos as $partido) {
			/* @var $partido Partido */
			$partido->procesar();
			$partido->save();
		}
		
		foreach($partidos as $partido) {
			$partido->getTorneo()->contabilizarPartidosYSancionesSiCorresponde($partido->getNroFecha(), $partido->getNroRueda());
			$partido->getTorneo()->save();
		}
		
	}
	
	public function getPartidosAProcesar()
	{
		$q = $this->createQuery('a')->where('estado_federacion = ? AND fecha <= NOW()', Partido::ESTADO_FEDERACION_Pendiente);		
		//$q = $this->createQuery('a')->where('estado_federacion = ?', Partido::ESTADO_FEDERACION_Pendiente);
		$partidosAProcesar = $q->execute();
		return $partidosAProcesar;
	}
	
	
	public function getPartidosObservados()
	{
		$q = $this->createQuery('a')->where('estado_federacion = ?', Partido::ESTADO_FEDERACION_Procesado);
		$q->orderBy('a.fecha');
		
		$partidosProcesados = $q->execute();
		$partidosObservados = array();
		foreach ($partidosProcesados as $partido) {
			if ($partido->getNotificaciones()->count() > 0) {
				array_push($partidosObservados, $partido);
			}
		}
		return $partidosObservados;
	}

	public function getPartidosOrdenadosPorFecha($torneo_id){
		$q = $this->createQuery('p')->where('p.torneo_id=?', $torneo_id)->orderBy('p.fecha');
		return $q->execute();
	}
	
	public function getPartidosCerrados()
	{
		$q = $this->createQuery('a')
		->where('estado_federacion = ?', Partido::ESTADO_FEDERACION_Cerrado)
		->orWhere('estado_federacion = ?', Partido::ESTADO_FEDERACION_Contabilizado);
		$q->orderBy('a.fecha');
		return $q->execute();
	}
	
	public function getPartidosConPlanillasCerradasNoContabilizadas($torneo_id, $nro_rueda, $nro_fecha)
	{
		$q = $this->createQuery('a')->where('a.estado_federacion = ?', Partido::ESTADO_FEDERACION_Cerrado)
			->andWhere('a.torneo_id = ?', $torneo_id)
			->andWhere('a.nro_rueda=?', $nro_rueda)
			->andWhere('a.nro_fecha=?', $nro_fecha);
		return $q->execute();
	}
	
	public function tienePartidosConPlanillasNoCerradas($torneo_id, $nro_rueda, $nro_fecha)
	{
		$q = $this->createQuery('a')->where('a.estado_federacion <> ?', Partido::ESTADO_FEDERACION_Cerrado)
			->andWhere('a.estado_federacion <> ?', Partido::ESTADO_FEDERACION_Contabilizado)
			->andWhere('a.torneo_id = ?', $torneo_id)
			->andWhere('a.nro_rueda=?', $nro_rueda)
			->andWhere('a.nro_fecha=?', $nro_fecha);
		$resultado = $q->count();
		return $resultado > 0;
	}
	
}